#include<iostream>
#include<memory>

int main()
{
    std::shared_ptr<std::string> sp1(new std::string("111"));
    std::shared_ptr<std::string> sp2(sp1);
    std::weak_ptr<std::string> wp1 = sp1;
    std::cout << wp1.expired() << std::endl;//wp1指向的资源过期为真,未过期为假
    std::cout << wp1.use_count() << std::endl;//wp1指向的资源有几个在管理
    sp1 = std::make_shared<std::string>("222");
    std::cout << wp1.expired() << std::endl;//wp1指向的资源过期为真,未过期为假
    std::cout << wp1.use_count() << std::endl;//wp1指向的资源有几个在管理
    sp2 = std::make_shared<std::string>("222");
    std::cout << wp1.expired() << std::endl;//wp1指向的资源过期为真,未过期为假
    std::cout << wp1.use_count() << std::endl;//wp1指向的资源有几个在管理

    std::cout << "=============================================" << std::endl;
    wp1 = sp1;
    std::cout << wp1.expired() << std::endl;//wp1指向的资源过期为真,未过期为假
    std::cout << wp1.use_count() << std::endl;//wp1指向的资源有几个在管理
    auto sp3 = wp1.lock();//将指向资源返回出来,为资源再次增加一个管理指针
    std::cout << wp1.expired() << std::endl;//wp1指向的资源过期为真,未过期为假
    std::cout << wp1.use_count() << std::endl;//wp1指向的资源有几个在管理
    std::cout << *sp3 << std::endl;
    *sp3 += "hhh";
    std::cout << *sp3 << std::endl;
    //上面的内存会有内存泄露
    return 0;
}